/*
 * relength.h
 *
 *  Created on: 2021年7月27日
 *      Author: wangbing
 *      Email : mz8023yt@163.com
 */

#ifdef __cplusplus
extern "C"
{
#endif

#ifndef _RELENGTH_H_
#define _RELENGTH_H_

#include <stdint.h>
#include "ringbuffer.h"

/**
 * @brief 返回值
 */
#ifndef ERROR
#define ERROR                   -1          // 通用错误码
#endif

#ifndef EINVAL
#define EINVAL                  -2          // 无效的参数
#endif

#ifndef ENOTINIT
#define ENOTINIT                -3          // 无效的参数
#endif

#ifndef EREINIT
#define EREINIT                 -4          // 无效的参数
#endif

/**
 * @brief 组件版本号
 */
#define RELENGTH_MAIN_VER       1
#define RELENGTH_SUB_VER        0
#define RELENGTH_REV_VER        0

typedef struct _RELENGTH_HANDLE_
{
    uint32_t init;                          // 初始化标记
    uint32_t sample_rate;                   // 音频采样率, 8k:8000; 16k:16000;
    uint32_t bit_width;                     // 音频采样精度, 8bit:1; 16bit:2;
    uint64_t pts_refer;                     // 参考时间戳
    RINGBUFFER ringbuffer;                  // 缓冲区
} RELENGTH_HANDLE;

typedef struct _RELENGTH_FRAME_
{
    uint8_t *buf;                           // 音频帧数据
    uint32_t len;                           // 音频帧长度
    uint64_t pts;                           // 音频帧时间戳, 单位us
} RELENGTH_FRAME;

int relength_init(RELENGTH_HANDLE *handle, uint32_t sample_rate, uint32_t bit_width, uint32_t size);
int relength_deinit(RELENGTH_HANDLE *handle);

int relength_read(RELENGTH_HANDLE *handle, RELENGTH_FRAME *frame);
int relength_write(RELENGTH_HANDLE *handle, RELENGTH_FRAME *frame);

#endif /* _RELENGTH_H_ */

#ifdef __cplusplus
}
#endif

